package pers.crayon.baseprogram.controller;


import org.apache.poi.ss.formula.functions.T;
import pers.crayon.baseprogram.enums.ExplainEnum;
import pers.crayon.baseprogram.enums.RequestStatusEnum;
import pers.crayon.baseprogram.model.Result;

/**
 * controller基类
 * <p>
 * TODO 存在多种业务需要多种enum解释时比较臃肿的问题，而且不应该每个controller都继承这么(划掉)臃肿(划掉)
 *
 * @author roamay.com
 * @since 2021/2/19 23:06
 */
public class BaseController {


    /**
     * 成功返回
     * 请求成功，操作成功，有数据返回
     *
     * @param t
     * @param <T>
     * @return
     */
    public <T> Result success(T t) {
        Result<T> dto = new Result<>();
        dto.setCode(RequestStatusEnum.SUCCESS.getCode() + ExplainEnum.SUCCESS.getCode())
                .setMsg("success")
                .setData(t);
        return dto;
    }

    /**
     * 成功返回
     * 请求成功，操作成功，无数据返回
     *
     * @param <T>
     * @return
     */
    protected Result success() {
        return success(null);
    }

    /**
     * 失败返回
     * 请求成功，但是操作失败，自定义code
     *
     * @param explainEnum
     * @param <T>
     * @return
     */
    public Result fail(ExplainEnum explainEnum) {
        Result<T> dto = new Result<>();
        dto.setCode(RequestStatusEnum.SUCCESS.getCode() + explainEnum.getCode());
        dto.setMsg(explainEnum.getErrMsg());
        return dto;
    }


    /**
     * 失败返回
     * 请求成功，但是操作失败，自定义code、msg
     *
     * @param code
     * @param msg
     * @return
     */
    public Result fail(String code, String msg) {
        Result<T> dto = new Result<>();
        dto.setCode(RequestStatusEnum.SUCCESS.getCode() + code);
        dto.setMsg(msg);
        return dto;
    }
}
